#define MAX_MFN_ALLOC 64
static unsigned long mfn_list[MAX_MFN_ALLOC];
static unsigned int alloc_index = 0;
-static DEFINE_SPINLOCK(mfn_lock);
static unsigned long alloc_mfn(void)
{
- unsigned long mfn = 0, flags;
+ unsigned long mfn = 0;
struct xen_memory_reservation reservation = {
.nr_extents = MAX_MFN_ALLOC,
.extent_order = 0,
.domid = DOMID_SELF
};
set_xen_guest_handle(reservation.extent_start, mfn_list);
- spin_lock_irqsave(&mfn_lock, flags);
if ( unlikely(alloc_index == 0) )
alloc_index = HYPERVISOR_memory_op(
XENMEM_increase_reservation, &reservation);
if ( alloc_index != 0 )
mfn = mfn_list[--alloc_index];
- spin_unlock_irqrestore(&mfn_lock, flags);
return mfn;
}
unsigned long vdata, old_mfn, new_mfn;
struct sk_buff_head rxq;
struct sk_buff *skb;
- u16 notify_list[NET_RX_RING_SIZE];
int notify_nr = 0;
int ret;
+ /*
+ * Putting hundreds of bytes on the stack is considered rude.
+ * Static works because a tasklet can only be on one CPU at any time.
+ */
+ static u16 notify_list[NET_RX_RING_SIZE];
skb_queue_head_init(&rxq);